package com.yycx.module.bus.provider.service;

import com.yycx.common.mybatis.base.service.IBaseService;
import com.yycx.common.security.OpenUser;
import com.yycx.module.bus.client.entity.BusSaleman;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 业务员 接口
 *
 * @author flyme
 * @date 2020-07-29
 */
public interface BusSalemanService extends IBaseService<BusSaleman> {

    /**
     * 查询部门人员
     *
     * @param deptId
     * @param hasSelf
     * @return
     */
    List<BusSaleman> selectList(Long deptId, Boolean hasSelf);


    /**
     * 根据业务编码和部门查询业务员
     *
     * @param deptId
     * @param saleManBusinessNo
     * @return
     */
    BusSaleman getBySaleManBusinessNo(Long deptId, String saleManBusinessNo);


    BusSaleman getBySaleManBusinessNo(String saleManBusinessNo);

    /**
     * description: 根据名称查询业务员
     * date: 2023年-07月-31日 10:46
     * author: ldd
     *
     * @param deptId
     * @param saleManName
     * @return com.yycx.module.bus.client.entity.BusSaleman
     */
    BusSaleman getBySaleManName(Long deptId, String saleManName);

    /**
     * 查询区域简称
     *
     * @param busSaleman
     * @return
     */
    String getAreaShortName(BusSaleman busSaleman);


    /**
     * 同步海鹰数据到结算系统
     *
     * @param openUser
     */
    void syncHyData(OpenUser openUser);


    /**
     * 统计资保金余额
     *
     * @param saleManId
     * @param companyId
     * @return
     */
    BigDecimal surplusCustomBondAmount(Long saleManId, Long companyId);

    /**
     * 剩余资保金余额(排除当前订单占用金额)
     *
     * @param saleManId
     * @param companyId
     * @param orderId
     * @return
     */
    BigDecimal surplusCustomBondAmount(Long saleManId, Long companyId, String orderId);


    /**
     * 同步用户到海鹰系统
     *
     * @param saleManId
     */
    void syncToHy(Long saleManId);


    /**
     * 更新是否享受省级结算
     *
     * @param proLevel
     * @param deptId
     */
    void updateProLevel(Integer proLevel, Long deptId);


    /**
     * 更新业务员状态
     *
     * @param saleManId
     * @param saleManState
     */
    void updateSaleManState(Long saleManId, String processInstanceId, Integer saleManState);

    /**
     * 更新资信信息
     *
     * @param params
     */
    Boolean updateAmount(Map params);
}
